package org.jeecg.common.job.data.service;

import com.alibaba.fastjson.JSONArray;
import org.jeecg.common.datasource.jdbc.vo.PageInfo;
import org.jeecg.common.datasource.jdbc.vo.PageSort;
import org.jeecg.common.job.data.vo.JobInfoVo;
import org.jeecg.common.job.data.vo.JobLogVo;

import java.util.Date;
import java.util.List;

public interface IJobService {

    /**
     * 根据ID获取任务信息
     *
     * @param id 任务ID
     * @return Job
     */
    JobInfoVo load(String id);

    /**
     * 添加
     *
     * @param job 任务对象
     */
    boolean save(JobInfoVo job);

    /**
     * 编辑
     *
     * @param job       任务对象
     * @param fieldName 更新字段
     */
    void update(JobInfoVo job, String... fieldName);

    /**
     * 删除数据
     *
     * @param id 任务ID
     */
    boolean delete(String id);

    /**
     * 分页查询定时任务
     *
     * @param pageSort 分页排序信息
     * @param name  名称
     * @return
     */
    PageInfo<JobInfoVo> getJobPage(PageSort pageSort, String name);

    /**
     * 查询所有任务列表(Reddis 获取)
     * @return
     */
    List<JobInfoVo> getCacheSelectJobList();

    /**
     * 将已存在的任务缓存到Redis中
     */
    void cacheSelectJob();

    /**
     * 获取系统定时任务配置
     *
     * @return
     */
    JSONArray getJobConfig();

    /**
     * 任务开关
     *
     * @param id   任务ID
     * @param type
     */
    boolean switchJob(String id, Integer type);

    /**
     * 监听定时任务
     *
     * @return
     */
    void listenerJob();

    /**
     * 保存日志
     * @param jobLog
     */
    public void saveJobLog(JobLogVo jobLog);

    /**
     * 删除日志
     * @param deleteDate
     */
    void deleteLogs(Date deleteDate);

    /**
     * 分页查询定时任务
     *
     * @param pageSort 分页排序信息
     * @param content  名称
     * @return
     */
    PageInfo<JobLogVo> getJobLogs(PageSort pageSort, String content);

    /**
     * 查询定时任务
     * @param beanName
     * @param beanMethod
     * @return
     */
    public JobInfoVo findJobInfoVo(String beanName, String beanMethod);
}
